{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 95,
   "id": "d8907893-6e99-4129-8bb8-f0eddfa098ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import warnings\n",
    "# 忽略所有警告\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ccca939-50fb-4e7f-a831-cbf69dafc9ac",
   "metadata": {},
   "source": [
    "# 读取文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d97ab2ed-64d4-446a-8677-294fc3e4c9b1",
   "metadata": {},
   "outputs": [],
   "source": [
    "data_1=pd.read_csv(r\"附件1\\M101.csv\", encoding='gbk')\n",
    "data_2=pd.read_csv(r\"附件1\\M102.csv\", encoding='gbk')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "24ed56b6-2f87-45d2-be12-aca59e639c6e",
   "metadata": {},
   "source": [
    "# 任务1.1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "af20bcb5-6d3e-4dc7-8a41-9062939aef88",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 单条生产线数据提取\n",
    "def renwu1_1(df):\n",
    "    #提取每天最后一秒的数据\n",
    "    data=df.groupby(['月份','日期']).last()[['合格产品累计数', '不合格产品累计数']]\n",
    "    data['产品总数']=data.sum(axis=1)\n",
    "    data['合格率']=(data['合格产品累计数']/data['产品总数'])*100\n",
    "    data=data[['产品总数', '合格产品累计数', '不合格产品累计数', '合格率']]\n",
    "    data.columns=['产品总数（件）','合格产品数（件）','不合格产品数（件）','合格率（%）']\n",
    "    data=data.reset_index()\n",
    "    #计算全年总和\n",
    "    Summary=data[['产品总数（件）','合格产品数（件）','不合格产品数（件）']].sum(axis=0)\n",
    "    Summary['合格率（%）']=(Summary['合格产品数（件）']/Summary['产品总数（件）'])*100\n",
    "    return data,Sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fcc663bb-38ef-4fa8-a728-621525cc6a42",
   "metadata": {},
   "outputs": [],
   "source": [
    "#处理两条生产线\n",
    "result1_1_M101,Summary1=renwu1_1(data_1)\n",
    "result1_1_M102,Summary2=renwu1_1(data_2)\n",
    "Summary=pd.concat([Summary1,Summary2],axis=1).T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "69b35e51-4335-4e71-8e64-c7dee6de2f0f",
   "metadata": {},
   "outputs": [],
   "source": [
    "#保存文件\n",
    "with pd.ExcelWriter(r\"result1_1.xlsx\", engine='openpyxl') as writer:\n",
    "    # 将DataFrame写入不同的工作表\n",
    "    result1_1_M101.to_excel(writer, sheet_name='M101', index=False)\n",
    "    result1_1_M102.to_excel(writer, sheet_name='M102', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "fc0ebd7e-3744-43bf-bebb-d22272f97f28",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>产品总数（件）</th>\n",
       "      <th>合格产品数（件）</th>\n",
       "      <th>不合格产品数（件）</th>\n",
       "      <th>合格率（%）</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>M101</th>\n",
       "      <td>1183016.0</td>\n",
       "      <td>1180910.0</td>\n",
       "      <td>2106.0</td>\n",
       "      <td>99.82198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M102</th>\n",
       "      <td>1186838.0</td>\n",
       "      <td>1184461.0</td>\n",
       "      <td>2377.0</td>\n",
       "      <td>99.79972</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        产品总数（件）   合格产品数（件）  不合格产品数（件）    合格率（%）\n",
       "M101  1183016.0  1180910.0     2106.0  99.82198\n",
       "M102  1186838.0  1184461.0     2377.0  99.79972"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Summary.index=['M101','M102']\n",
    "Summary"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be35ddbe-fb91-482d-9b30-263638f97eb5",
   "metadata": {},
   "source": [
    "# 任务1.2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "id": "197b2c0f-ad39-43ab-ad1d-2667d17a57cf",
   "metadata": {},
   "outputs": [],
   "source": [
    "def renwu1_2(data):\n",
    "    data = data[['月份', '日期', '时间', '故障类别']]\n",
    "\n",
    "    # 计算'故障类别'列中的变化\n",
    "    # 因为.diff()函数无法处理字符类型，需转为布尔型数组\n",
    "    diff = data['故障类别'].isnull().diff()\n",
    "    diff.iloc[0] = False\n",
    "\n",
    "    # 保留'故障类别'发生变化的行。\n",
    "    diff = data[diff]\n",
    "    # 筛选出故障开始时的数据\n",
    "    result = diff[diff['故障类别'].notnull()]\n",
    "\n",
    "    # 计算'持续时间'，使用索引计算是因为有部分故障在当天结束发生\n",
    "    result['持续时间'] = diff.iloc[1::2].index - diff.iloc[::2].index\n",
    "    result.columns = ['月份', '日期', '开始时间', '故障类别', '持续时间（秒）']\n",
    "\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "id": "dbda04e4-c2e8-4715-9917-5ebc3df87c7b",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_2_M101=renwu1_2(data_1)\n",
    "result1_2_M102=renwu1_2(data_2)\n",
    "with pd.ExcelWriter(r\"result1_2.xlsx\") as writer:\n",
    "    # 将DataFrame写入不同的工作表\n",
    "    result1_2_M101.to_excel(writer, sheet_name='M101', index=False)\n",
    "    result1_2_M102.to_excel(writer, sheet_name='M102', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "id": "37dcaf6c-ff65-4631-b448-305f136a9191",
   "metadata": {},
   "outputs": [],
   "source": [
    "#以故障类别，分组取其中第25个\n",
    "Summary1=result1_2_M101.groupby('故障类别').apply(lambda x : x.iloc[24])\n",
    "Summary1['生产线']='M101'\n",
    "Summary2=result1_2_M102.groupby('故障类别').apply(lambda x : x.iloc[24])\n",
    "Summary2['生产线']='M102'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "id": "3a4ac597-231b-424b-951e-e3f74efc1160",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>生产线</th>\n",
       "      <th>故障类别</th>\n",
       "      <th>月份</th>\n",
       "      <th>日期</th>\n",
       "      <th>开始时间</th>\n",
       "      <th>持续时间（秒）</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>M101</td>\n",
       "      <td>A1</td>\n",
       "      <td>2</td>\n",
       "      <td>14</td>\n",
       "      <td>28553</td>\n",
       "      <td>247</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>M101</td>\n",
       "      <td>A2</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>19819</td>\n",
       "      <td>672</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>M101</td>\n",
       "      <td>A3</td>\n",
       "      <td>1</td>\n",
       "      <td>30</td>\n",
       "      <td>3717</td>\n",
       "      <td>865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>M101</td>\n",
       "      <td>A4</td>\n",
       "      <td>1</td>\n",
       "      <td>13</td>\n",
       "      <td>22814</td>\n",
       "      <td>887</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>M102</td>\n",
       "      <td>A1</td>\n",
       "      <td>3</td>\n",
       "      <td>2</td>\n",
       "      <td>25982</td>\n",
       "      <td>581</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>M102</td>\n",
       "      <td>A2</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>7842</td>\n",
       "      <td>384</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>M102</td>\n",
       "      <td>A3</td>\n",
       "      <td>2</td>\n",
       "      <td>12</td>\n",
       "      <td>12307</td>\n",
       "      <td>737</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>M102</td>\n",
       "      <td>A4</td>\n",
       "      <td>1</td>\n",
       "      <td>14</td>\n",
       "      <td>28122</td>\n",
       "      <td>625</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    生产线 故障类别  月份  日期   开始时间  持续时间（秒）\n",
       "0  M101   A1   2  14  28553      247\n",
       "1  M101   A2   1   4  19819      672\n",
       "2  M101   A3   1  30   3717      865\n",
       "3  M101   A4   1  13  22814      887\n",
       "4  M102   A1   3   2  25982      581\n",
       "5  M102   A2   1   5   7842      384\n",
       "6  M102   A3   2  12  12307      737\n",
       "7  M102   A4   1  14  28122      625"
      ]
     },
     "execution_count": 155,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Summary=pd.concat([Summary1,Summary2]).set_index(['生产线','故障类别']).reset_index()\n",
    "Summary"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a3e9aea1-9889-499c-86de-5fafc2e56703",
   "metadata": {},
   "source": [
    "# 任务1.3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 272,
   "id": "6ead30bb-e5e4-44c0-bafb-3b515bfbfd68",
   "metadata": {},
   "outputs": [],
   "source": [
    "def renwu3(data):\n",
    "    #计算总次数列和平均持续时长（秒）列\n",
    "    result_count = data.groupby(['月份', '日期', '故障类别']).size().reset_index(name='总次数')\n",
    "    result_duration = data.groupby(['月份', '日期', '故障类别'])['持续时间（秒）'].mean().reset_index(name='平均持续时长（秒）')\n",
    "    result_count=result_count.pivot(index=['月份', '日期'],columns='故障类别',values='总次数').fillna(0).reset_index()\n",
    "    result_count=pd.melt(result_count, id_vars=['月份', '日期'], value_vars=['A1', 'A2', 'A3', 'A4'],var_name='故障类别', value_name='总次数')\n",
    "    #合并\n",
    "    result=pd.merge(result_count, result_duration, on=['月份', '日期', '故障类别'], how='left')\n",
    "    result.sort_values(by=['月份', '日期', '故障类别'], inplace=True)\n",
    "    #将nan改为null\n",
    "    result.replace(np.nan, None, inplace=True)\n",
    "\n",
    "    # size()计算总次数，mean()计算平均持续时间\n",
    "    Summary = data.groupby('故障类别').agg({'持续时间（秒）': ['size','mean']}).T\n",
    "    # 重命名索引\n",
    "    Summary.index = ['总次数','平均持续时长（秒/次）']\n",
    "    Summary.loc['发生频率（次/天）']=Summary.loc['总次数']/365\n",
    "    #汇总\n",
    "    Summary['汇总']=Summary.sum(axis=1)\n",
    "    Summary.iloc[1,-1]=data['持续时间（秒）'].mean()\n",
    "    return result,Summary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 276,
   "id": "84256a1e-2d16-410c-be52-43914cdc6f93",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_3_M101,Summary1=renwu3(result1_2_M101)\n",
    "result1_3_M102,Summary2=renwu3(result1_2_M102)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 280,
   "id": "df26148f-144c-43b3-9210-a3ad72f35582",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_3_M101['生产线']='M101'\n",
    "result1_3_M102['生产线']='M102'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 283,
   "id": "04da18e5-4f4b-472b-94aa-6dfcb7fe6c11",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_3=pd.concat([result1_3_M101,result1_3_M102]).set_index('生产线')\n",
    "result1_3.to_excel('result1_3.xlsx')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 287,
   "id": "3c04e7a5-1b11-43c4-8368-415472876230",
   "metadata": {},
   "outputs": [],
   "source": [
    "Summary1.columns.name='生产线M101 '\n",
    "Summary2.columns.name='生产线M102 '"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 286,
   "id": "6037746c-cdbd-4229-8d7a-36f1f7b5f879",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>生产线M101</th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>A4</th>\n",
       "      <th>汇总</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>总次数</th>\n",
       "      <td>240.000000</td>\n",
       "      <td>2335.00000</td>\n",
       "      <td>319.000000</td>\n",
       "      <td>826.000000</td>\n",
       "      <td>3720.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>平均持续时长（秒/次）</th>\n",
       "      <td>474.033333</td>\n",
       "      <td>541.31349</td>\n",
       "      <td>728.614420</td>\n",
       "      <td>738.830508</td>\n",
       "      <td>596.891667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>发生频率（次/天）</th>\n",
       "      <td>0.657534</td>\n",
       "      <td>6.39726</td>\n",
       "      <td>0.873973</td>\n",
       "      <td>2.263014</td>\n",
       "      <td>10.191781</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "生产线M101              A1          A2          A3          A4           汇总\n",
       "总次数          240.000000  2335.00000  319.000000  826.000000  3720.000000\n",
       "平均持续时长（秒/次）  474.033333   541.31349  728.614420  738.830508   596.891667\n",
       "发生频率（次/天）      0.657534     6.39726    0.873973    2.263014    10.191781"
      ]
     },
     "execution_count": 286,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Summary1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 288,
   "id": "b50a9769-5974-47ba-98ab-abbaff9bb003",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>生产线M102</th>\n",
       "      <th>A1</th>\n",
       "      <th>A2</th>\n",
       "      <th>A3</th>\n",
       "      <th>A4</th>\n",
       "      <th>汇总</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>总次数</th>\n",
       "      <td>217.000000</td>\n",
       "      <td>2263.000000</td>\n",
       "      <td>318.000000</td>\n",
       "      <td>852.000000</td>\n",
       "      <td>3650.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>平均持续时长（秒/次）</th>\n",
       "      <td>468.857143</td>\n",
       "      <td>541.521874</td>\n",
       "      <td>727.327044</td>\n",
       "      <td>745.400235</td>\n",
       "      <td>600.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>发生频率（次/天）</th>\n",
       "      <td>0.594521</td>\n",
       "      <td>6.200000</td>\n",
       "      <td>0.871233</td>\n",
       "      <td>2.334247</td>\n",
       "      <td>10.00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "生产线M102              A1           A2          A3          A4       汇总\n",
       "总次数          217.000000  2263.000000  318.000000  852.000000  3650.00\n",
       "平均持续时长（秒/次）  468.857143   541.521874  727.327044  745.400235   600.98\n",
       "发生频率（次/天）      0.594521     6.200000    0.871233    2.334247    10.00"
      ]
     },
     "execution_count": 288,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Summary2"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bf644f5d-9239-4c4c-80b3-2375436a6a72",
   "metadata": {},
   "source": [
    "# 任务1.4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 306,
   "id": "3ce6d24b-ceae-4615-b5ca-d1581944f321",
   "metadata": {},
   "outputs": [],
   "source": [
    "def renwu4(df):\n",
    "    data = df[['月份', '日期', '时间', '故障类别']].copy()\n",
    "    data=data[data['故障类别'].isnull()]\n",
    "    result=data.groupby(['月份', '日期']).size()/3600\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 311,
   "id": "37813da0-e255-4793-a051-ac087a59d73b",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_4=pd.concat([renwu4(data_1),renwu4(data_2)],axis=1).reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 314,
   "id": "1dc5735b-d2d0-4b52-bf44-f8f85befe6e1",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_4.columns=['月份', '日期','M101（小时）','M102（小时）']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 319,
   "id": "5c0c38da-6150-44f5-aeca-32600dddd5ef",
   "metadata": {},
   "outputs": [],
   "source": [
    "result1_4.to_excel('result1_4.xlsx',index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 317,
   "id": "8ed24e61-69de-4865-ba3b-5f7697fea3a8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "M101（小时）    6.309892\n",
       "M102（小时）    6.330333\n",
       "dtype: float64"
      ]
     },
     "execution_count": 317,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "result1_4[['M101（小时）','M102（小时）']].mean(axis=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f4c87015-6937-4ab0-813f-9e6fd04f20cb",
   "metadata": {},
   "source": [
    "# 任务1.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 347,
   "id": "5bf262c5-8ea6-460c-afcc-823fafc1448b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 347,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#确认故障类别 A2 为 抓取的元件装置的故障状态\n",
    "np.sum((data_1['抓取状态']==-1)!=(data_1['故障类别']=='A2'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 353,
   "id": "9106a34e-6939-42d1-89a5-ac4defd21b1f",
   "metadata": {},
   "outputs": [],
   "source": [
    "data=data_1.groupby(['月份', '日期']).last()[['推出累计数','抓取累计数']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 361,
   "id": "bb16c90c-ad0c-406f-9dac-89e8ff6bd2ee",
   "metadata": {},
   "outputs": [],
   "source": [
    "data['抓取的故障次数']=result1_3[(result1_3['故障类别']=='A2')&(result1_3.index=='M101')]['总次数'].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 367,
   "id": "9dd44282-b424-427a-96a3-b1b896c43dc8",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>推出累计数</th>\n",
       "      <th>抓取累计数</th>\n",
       "      <th>抓取的故障次数</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>推出累计数</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.999998</td>\n",
       "      <td>-0.616293</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>抓取累计数</th>\n",
       "      <td>0.999998</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.616500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>抓取的故障次数</th>\n",
       "      <td>-0.616293</td>\n",
       "      <td>-0.616500</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            推出累计数     抓取累计数   抓取的故障次数\n",
       "推出累计数    1.000000  0.999998 -0.616293\n",
       "抓取累计数    0.999998  1.000000 -0.616500\n",
       "抓取的故障次数 -0.616293 -0.616500  1.000000"
      ]
     },
     "execution_count": 367,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.corr()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 378,
   "id": "cd6b583c-c545-44c5-b1a4-df2a1e0ceb77",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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zZtYvHgx/Pz8cPPmTYSEhKBfv36l6ptXklJX7IiIiIgqstDQUEyaNElv29PVOgCQSqUG2xUKBfLz8+Hi4mL03OvXr4eHhwf2798PuVyOCRMmoHr16ti/fz+6du1a5tiZ2BEREZH1seB8c8Yeuxrj6uqK+Ph4vW0PHz6ETCYrtk1KSgo6d+6sO7+DgwPq1KmDpKSksgX9f/goloiIiKyOSCy22GIqf39/xMTE6NaTk5OhVCrh6upabJtq1aqhoKBAt67VapGSkmK2MQtM7IiIiIieQ/v27ZGdnY2NGzcCAMLDw9GlSxdIJBLk5ORApVIZtHnnnXewZ88e/PLLL0hJSUFoaCiUSiXatGljlpiY2BEREZH1EYkst5hIKpUiIiICY8aMgYeHB3bs2IHw8HAAj0bIGpv+rV69evj5558xd+5c1KlTB5GRkfj111/h4OBglq+FfeyIiIiInlOfPn1w5coVxMbGIiAgAO7u7gAePZYtTlBQEIKCgiwSDxM7IiIisj6l6Atnad7e3vD29n7ZYQDgo1giIiKiCoMVOyIiIrI+ZnpTQ0XDih0RERFRBcGKHREREVmd0sw39yphYkdERETWR8TEzhh+K0REREQVBCt2REREZH0s+K5Ya8aKHREREVEFwYodERERWR0R+9gZxW+FiIiIqIJgxY6IiIisD/vYGcWKHREREVEFwYodERERWR/2sTOKiR0RERFZH74r1iimu0REREQVBCt2REREZH34rlij+K0QERERVRCs2BEREZH14eAJo/itEBEREVUQrNgRERGR9eEExUaxYkdERERUQbBiR0RERNaHfeyMYmJHRERE1ocTFBvFdJeIiIiogmDFjoiIiKwPJyg2it8KERERUQXBih0RERFZH/axM4oVOyIiIqIKghU7IiIisj6c7sQofitEREREFQQrdkRERGR9OCrWKH4rRERERBUEK3ZERERkfTgq1igmdkRERGR9OHjCKH4rRERERBUEK3ZERERkffgo1ihW7IiIiIgqCFbsiIiIyPpwuhOj+K0QERERVRCs2BEREZHVEdjHzihW7IiIiIgqCFbsiIiIyPpwHjujmNgRERGR9WFiZxS/FSIiIqIKghU7IiIisjocPGEcK3ZEREREzyk+Ph7+/v5wcXFBSEgIBEEwua1KpULjxo3x119/mS0eJnZERERkfURiyy0mUiqV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DwDg4OCA3r1748iRI2jWrBn+85//oKCgwOJBExEREZEhk0bFenp64pNPPkFcXBxmz56NTz75BFu3btXtF4lEWLRoEWrVqoWxY8daLFgiIiIiABC0llusWammO1Gr1cjLy8OZM2fQu3dvhIWF4dSpU7r9K1aswC+//ILk5GRzx0lEREREz2ByYnf79m20bdsW4eHhKCoqgkKhQG5uLt566y2MHj0a9+/fh4eHB86ePYsaNWpYMGQiIiJ61QmCYLHFmpmU2F27dg3NmjVDixYtcObMGbi5uUEsFmPevHm4du0abGxsULduXSxZsoRJHREREdFLYlJiV6tWLWzcuBHLli2DTCbT21e5cmUsX74cP//8M9atW4f79+9bJFAiIiKix7Rayy3WzKR57EQiEbp161biMV26dEFcXJxZgiIiIiIqibU/MrUUk/vYnT9/HgAwZMgQZGRkGOwvKChAz549zRcZEREREZWKya8UGzx4MC5cuID79+9DIpEgODgYNjY2EAQB1atXx+LFi/kYloiIiF4ILQt2RplcsbO3t8fChQuRmZkJsViMixcvQi6Xo0GDBvj7778hFoshlT7Xq2eJiIiIyAxMSuzy8/OhVquRkZGB5ORkiEQiuLi4oHHjxujQoQMEQUBRUZHuWCIiIiJLErSCxRZr9szEbvv27Xj99dehUCiwcOFCNG/e3KDD4unTp2Fra4vjx4/DwcHBYsESERERUfGemdh17NgRBw8eBACsW7cO58+fh0gk0jumRYsW0Gg0aNOmDQoLCy0TKREREdH/EQTLLdbsmZ3i3N3dATx6xJqZmQlHR0cIgoD09HT8888/uHPnju5YkUgEGxsby0VLRERERMUyebRD3bp1MWnSJERFRUGlUiEgIAD29vYoLCxE9+7doVKpWK0jIiKiF0Jr5X3hLMWkxO7SpUv4/PPPAQDvvfcebG1tsWXLFvz55584ceIE/Pz8oNFo0LBhQ4sGS0RERARwguLimDQq9sKFC+jYsSPq1q2Ly5cv4/Tp0+jevTtCQ0NhY2ODTz/9FFevXsW6dessHS8RERERFcPkR7Hz589H9+7dsWfPHkyePBnvvfcexo8fDwBITEzE9evX0ahRI4sFSkRERPSYYOXvdLUUkxO76OhoKJVKAED//v1RWFiIhQsXAgBee+01XLp0CZcuXQIATJkyxQKhEhEREVFJ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",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei']\n",
    "plt.rcParams['axes.unicode_minus']=False\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "sns.heatmap(data.corr(), annot=True, fmt=\".3f\", cmap='coolwarm')\n",
    "# 设置标题\n",
    "plt.title('相关性矩阵热力图')\n",
    "# 显示图形\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "19e7548c-dd9e-4fc0-9048-20f24285c5ee",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
